Skip to content

Commit 4bf780f

Browse files
xaionaro@dx.centerxaionaro@dx.center
authored andcommitted
docs: fix buffer loop placeholder functions and missing import
- Replace non-existent dequeueInputBuffer/dequeueOutputBuffer placeholder calls with actual capi calls inline, annotated with "(capi - not yet in idiomatic layer)" comments - Add missing capihw import to README.md capi example snippet
1 parent 7be7206 commit 4bf780f

2 files changed

Lines changed: 17 additions & 26 deletions

File tree

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,8 @@ The `capi/` packages (`github.com/AndroidGoLab/ndk/capi/{module}`) are the raw C
8181
When using `capi/` functions, wrap the resulting C pointers in idiomatic types as soon as possible:
8282

8383
```go
84+
import capihw "github.com/AndroidGoLab/ndk/capi/hardwarebuffer"
85+
8486
// Advanced: allocate via capi, then wrap in idiomatic type
8587
var rawBuf *capihw.AHardwareBuffer
8688
capihw.AHardwareBuffer_allocate(&desc, &rawBuf)

llms.txt

Lines changed: 15 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -626,16 +626,21 @@ Format keys are passed as strings to `SetInt32`/`SetString`/`SetFloat`/`SetInt64
626626

627627
The idiomatic `media` package provides `GetInputBuffer`, `QueueInputBuffer`, `GetOutputBuffer`, `ReleaseOutputBuffer`, and all constants (`media.AMEDIACODEC_INFO_*`, `media.AMEDIACODEC_BUFFER_FLAG_*`). The `DequeueInputBuffer` and `DequeueOutputBuffer` functions are not yet in the idiomatic layer and require a `capi/media` import (see **Advanced** note below).
628628

629+
The dequeue functions (`DequeueInputBuffer`, `DequeueOutputBuffer`) are not yet in the idiomatic layer and require a `capi/media` import. All other buffer operations use the idiomatic `media` package.
630+
629631
```go
630632
import (
631633
"unsafe"
632634
"github.com/AndroidGoLab/ndk/media"
635+
capimedia "github.com/AndroidGoLab/ndk/capi/media" // needed for dequeue (not yet idiomatic)
633636
)
634637

638+
// Get the raw capi pointer for dequeue calls
639+
rawCodec := (*capimedia.AMediaCodec)(codec.Pointer())
640+
635641
for {
636-
// 1. Dequeue input buffer
637-
// Not yet in idiomatic layer; see "Advanced (capi)" below for the call.
638-
idx := dequeueInputBuffer(codec, timeoutUs)
642+
// 1. Dequeue input buffer (capi — not yet in idiomatic layer)
643+
idx := capimedia.AMediaCodec_dequeueInputBuffer(rawCodec, timeoutUs)
639644
if idx < 0 { continue } // no buffer available yet
640645

641646
// 2. Fill with data (NAL units for video, PCM for audio)
@@ -644,45 +649,29 @@ for {
644649
data := unsafe.Slice(buf, bufSize)
645650
n := copy(data, inputFrame)
646651

647-
// 3. Queue for processing
652+
// 3. Queue for processing (idiomatic)
648653
codec.QueueInputBuffer(uint64(idx), 0, uint64(n), presentationTimeUs, 0)
649654
// End of stream: pass uint32(media.AMEDIACODEC_BUFFER_FLAG_END_OF_STREAM)
650655

651-
// 4. Dequeue output buffer
652-
// Not yet in idiomatic layer; see "Advanced (capi)" below.
653-
outIdx := dequeueOutputBuffer(codec, &info, timeoutUs)
656+
// 4. Dequeue output buffer (capi — not yet in idiomatic layer)
657+
var info capimedia.AMediaCodecBufferInfo
658+
outIdx := capimedia.AMediaCodec_dequeueOutputBuffer(rawCodec, &info, timeoutUs)
654659
if outIdx == int64(media.AMEDIACODEC_INFO_OUTPUT_FORMAT_CHANGED) {
655-
// Output format changed, query new format
656-
continue
660+
continue // output format changed, query new format
657661
}
658662
if outIdx < 0 { continue }
659663

660-
// 5. Consume output (decoded frame or encoded bitstream)
664+
// 5. Consume output (idiomatic)
661665
var outSize uint64
662666
outBuf := codec.GetOutputBuffer(uint64(outIdx), &outSize)
663667
outData := unsafe.Slice(outBuf, outSize)
664668
processOutput(outData)
665669

666-
// 6. Release back to codec (render=true to send to surface)
670+
// 6. Release back to codec (idiomatic; render=true to send to surface)
667671
codec.ReleaseOutputBuffer(uint64(outIdx), false)
668672
}
669673
```
670674

671-
**Advanced (capi)**: The dequeue functions require the `capi/media` package until idiomatic wrappers are added:
672-
673-
```go
674-
import capimedia "github.com/AndroidGoLab/ndk/capi/media"
675-
676-
rawCodec := (*capimedia.AMediaCodec)(codec.Pointer())
677-
678-
// DequeueInputBuffer returns buffer index (>= 0) or negative info code
679-
idx := capimedia.AMediaCodec_dequeueInputBuffer(rawCodec, timeoutUs)
680-
681-
// DequeueOutputBuffer returns buffer index (>= 0) or negative info code
682-
var info capimedia.AMediaCodecBufferInfo
683-
outIdx := capimedia.AMediaCodec_dequeueOutputBuffer(rawCodec, &info, timeoutUs)
684-
```
685-
686675
### Buffer Flags
687676

688677
Available in the idiomatic `media` package (type `media.MEDIACODEC_BUFFER_FLAG`):

0 commit comments

Comments
 (0)