-
-
Notifications
You must be signed in to change notification settings - Fork 56.5k
is offset required here for accessing output buffer? #21021
Copy link
Copy link
Closed
Milestone
Description
| buffer = std::vector<uint8_t>(codecBuffer + info.offset, codecBuffer + bufferSize); |
uint8_t* codecBuffer = AMediaCodec_getOutputBuffer(mediaCodec.get(), bufferIndex, &bufferSize);
buffer = std::vector<uint8_t>(codecBuffer + info.offset, codecBuffer + bufferSize);Per Android NDK code, AMediaCodec_getOutputBuffer() already returns underlying raw buffer contains offset
https://android.googlesource.com/platform/frameworks/av/+/master/media/ndk/NdkMediaCodec.cpp#575
EXPORT
uint8_t* AMediaCodec_getOutputBuffer(AMediaCodec *mData, size_t idx, size_t *out_size) {
if (mData->mAsyncNotify != NULL) {
// Asynchronous mode
sp<MediaCodecBuffer> abuf;
if (mData->mCodec->getOutputBuffer(idx, &abuf) != 0) {
return NULL;
}
if (out_size != NULL) {
*out_size = abuf->capacity();
}
return abuf->data();
}
... uint8_t *base() { return (uint8_t *)mData; }
uint8_t *data() { return (uint8_t *)mData + mRangeOffset; }
size_t capacity() const { return mCapacity; }
size_t size() const { return mRangeLength; }
size_t offset() const { return mRangeOffset; }Which means codecBuffer already have info.offset. Hence, is codecBuffer + info.offset still required?
BTW: info.offset is from MediaCodecBuffer/ABuffer .offset() too.
https://android.googlesource.com/platform/frameworks/av/+/master/media/ndk/NdkMediaCodec.cpp#627
https://android.googlesource.com/platform/frameworks/av/+/3fdb405/media/libstagefright/MediaCodec.cpp#405
Reactions are currently unavailable